package br.com.edumobi.dados.modelos;

import java.util.List;

import br.com.edumobi.dados.modelos.enuns.Nivel;

public class Questao extends ObjetoGeral {

    public String enunciado;
    public String observacao;
    public String imagem;
    public Alternativa alternativaCorreta;
    public List<Alternativa> alternativas;
    public Nivel nivel;

    public boolean respondida;
    public boolean acertou;

    public Questao(Long id, String enunciado, String observacao, String imagem, Alternativa alternativaCorreta, List<Alternativa> alternativas, Nivel nivel) {
        super(id);
        this.enunciado = enunciado;
        this.observacao = observacao;
        this.imagem = imagem;
        this.alternativaCorreta = alternativaCorreta;
        this.alternativas = alternativas;
        this.nivel = nivel;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Questao)) return false;
        if (!super.equals(o)) return false;

        Questao questao = (Questao) o;

        if (!alternativaCorreta.equals(questao.alternativaCorreta)) return false;
        if (!alternativas.equals(questao.alternativas)) return false;
        if (!enunciado.equals(questao.enunciado)) return false;
        if (imagem != null && !imagem.equals(questao.imagem)) return false;
        if (observacao != null && !observacao.equals(questao.observacao)) return false;
        if (nivel != null && !nivel.equals(questao.nivel)) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + enunciado.hashCode();

        if (observacao != null) {
            result = 31 * result + observacao.hashCode();
        }

        if (imagem != null) {
            result = 31 * result + imagem.hashCode();
        }

        result = 31 * result + alternativaCorreta.hashCode();
        result = 31 * result + alternativas.hashCode();
        result = 31 * result + nivel.hashCode();
        return result;
    }
}
